# -*- coding: utf-8 -*-
"""
    @project: pyproject
    @Author：HanYonghua
    @file： natstest-server.py
    @date：2025/8/8 14:16
    @blogs: https://www.ncatest.com.cn
"""

import asyncio
from nats.aio.client import Client as NATS

async def reconnected_cb():
    print("成功重新连接到 NATS 服务器！")

async def disconnected_cb():
    print("与 NATS 服务器断开连接，正在尝试重连...")

async def handle_request(msg):
    """处理客户端请求并返回响应"""
    print(f"收到请求: {msg.data.decode()}")
    await nc.publish(msg.reply, b"Response: OK")  # 回复到客户端的临时主题


async def run_server():
    global nc
    nc = NATS()

    # 连接到 NATS 服务器
    #await nc.connect("nats://localhost:4222")
    await nc.connect(
        servers=["nats://localhost:4222"],
        reconnected_cb=reconnected_cb,      # 重连成功回调
        disconnected_cb=disconnected_cb,    # 断开连接回调
        max_reconnect_attempts=5,           # 最大重试次数（-1 表示无限重试）
        reconnect_time_wait=2,              # 重试间隔（秒）
    )

    # 订阅主题 'service'，等待客户端请求
    await nc.subscribe("service", cb=handle_request)
    print("服务端已启动，等待请求...")

    # 保持运行直到手动停止
    while True:
        await asyncio.sleep(1)


if __name__ == "__main__":
    try:
        asyncio.run(run_server())
    except KeyboardInterrupt:
        print("服务端关闭")